﻿//using System;
//using System.Collections.Generic;
//using System.Linq;
//using System.Text;
//using System.Xml;
//using System.Xml.XPath;
//using System.Diagnostics;

//namespace GenericLibrary.Xml {

//    public class XPathDocument : IXPathNavigable {

//        //按左序深度顺序
//        internal List<XPathNode> _nodes;

//        #region IXPathNavigable Members

//        public XPathNavigator CreateNavigator() {
//            throw new NotImplementedException();
//        }

//        #endregion
//    }

//    public abstract class XPathNode : XPathNode<XPathDocument> {

//        public abstract int DescendantCount { get; }
//    }

//    public class NamespacedElementNode : XPathNode {

//        private string _prefix, _localName, _value;
//        private int _descendantCount;

//        public NamespacedElementNode( string prefix, string localName, string value ) {
//            this._prefix = prefix;
//            this._localName = localName;
//            this._value = value;
//        }

//        public override XPathNodeType NodeType {
//            get {
//                return XPathNodeType.Element;
//            }
//        }

//        public override string Prefix {
//            get {
//                return this._prefix;
//            }
//        }

//        public override string LocalName {
//            get {
//                return this._localName;
//            }
//        }

//        public override string Value {
//            get {
//                return this._value;
//            }
//        }

//        public override int DescendantCount {
//            get { throw new NotImplementedException(); }
//        }

//        public override XPathNode<XPathDocument> GetParent( XPathDocument tree ) {
//            throw new NotImplementedException();
//        }

//        public override XPathNode<XPathDocument> GetFirstChild( XPathDocument tree ) {
//            throw new NotImplementedException();
//        }

//        public override XPathNode<XPathDocument> GetPrevious( XPathDocument tree ) {
//            throw new NotImplementedException();
//        }

//        public override XPathNode<XPathDocument> GetNext( XPathDocument tree ) {
//            throw new NotImplementedException();
//        }

//        public override XPathNode<XPathDocument> GetFirstAttribute( XPathDocument tree ) {
//            throw new NotImplementedException();
//        }

//        public override XPathNode<XPathDocument> GetNextAttribute( XPathDocument tree ) {
//            throw new NotImplementedException();
//        }

//        public override XPathNode<XPathDocument> GetFirstNamespace( XPathDocument tree ) {
//            throw new NotImplementedException();
//        }

//        public override XPathNode<XPathDocument> GetNextNamespace( XPathDocument tree ) {
//            throw new NotImplementedException();
//        }
//    }

//    public class ElementNode : XPathNode {

//        private string _localName, _value;
//        private int _descendantCount;

//        public ElementNode( string localName, string value ) {
//            this._localName = localName;
//            this._value = value;
//        }

//        public override XPathNodeType NodeType {
//            get {
//                return XPathNodeType.Element;
//            }
//        }

//        public override string LocalName {
//            get {
//                return this._localName;
//            }
//        }

//        public override string Value {
//            get {
//                return this._value;
//            }
//        }

//        public override int DescendantCount {
//            get { throw new NotImplementedException(); }
//        }

//        public override XPathNode<XPathDocument> GetParent( XPathDocument tree ) {
//            throw new NotImplementedException();
//        }

//        public override XPathNode<XPathDocument> GetFirstChild( XPathDocument tree ) {
//            throw new NotImplementedException();
//        }

//        public override XPathNode<XPathDocument> GetPrevious( XPathDocument tree ) {
//            throw new NotImplementedException();
//        }

//        public override XPathNode<XPathDocument> GetNext( XPathDocument tree ) {
//            throw new NotImplementedException();
//        }

//        public override XPathNode<XPathDocument> GetFirstAttribute( XPathDocument tree ) {
//            throw new NotImplementedException();
//        }

//        public override XPathNode<XPathDocument> GetNextAttribute( XPathDocument tree ) {
//            throw new NotImplementedException();
//        }

//        public override XPathNode<XPathDocument> GetFirstNamespace( XPathDocument tree ) {
//            throw new NotImplementedException();
//        }

//        public override XPathNode<XPathDocument> GetNextNamespace( XPathDocument tree ) {
//            throw new NotImplementedException();
//        }
//    }

//    public class TextNode : XPathNode<XPathDocument> {

//        private string _value;

//        public TextNode( string value ) {
//            this._value = value;
//        }

//        public override XPathNodeType NodeType {
//            get {
//                return XPathNodeType.Text;
//            }
//        }

//        public override string Value {
//            get {
//                return this._value;
//            }
//        }
//    }

//    public class AttributeNode : XPathNode<XPathDocument> {

//        private string _localName, _value;

//        public AttributeNode( string localName, string value ) {
//            this._localName = localName;
//            this._value = value;
//        }

//        public override XPathNodeType NodeType {
//            get {
//                return XPathNodeType.Attribute;
//            }
//        }

//        public override string LocalName {
//            get {
//                return this._localName;
//            }
//        }

//        public override string Value {
//            get {
//                return this._value;
//            }
//        }
//    }

//    public class NamespacedAttributeNode : XPathNode<XPathDocument> {

//        private string _prefix, _localName, _value;

//        public NamespacedAttributeNode( string prefix, string localName, string value ) {
//            this._prefix = prefix;
//            this._localName = localName;
//            this._value = value;
//        }

//        public override XPathNodeType NodeType {
//            get {
//                return XPathNodeType.Attribute;
//            }
//        }

//        public override string Prefix {
//            get {
//                return this._prefix;
//            }
//        }

//        public override string LocalName {
//            get {
//                return this._localName;
//            }
//        }

//        public override string Value {
//            get {
//                return this._value;
//            }
//        }
//    }

//    public class RootNode : XPathNode<XPathDocument> {

//        public override XPathNodeType NodeType {
//            get {
//                return XPathNodeType.Root;
//            }
//        }
//    }
//}
